﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include "Point.h"
#include "Circle.h"
/*
* 1.设计一个圆类（AdvCircle），和一个点类（Point），计算点和圆的关系；
* 假如圆心坐标为x0，y0，半径为r，点的坐标为x1，y2；
*/
/*
//4.点类；
class Point
{
public:
	void setX(int x)
	{
		m_X = x;
	}
	int getX()
	{
		return m_X;
	}
	void setY(int y)
	{
		m_Y = y;
	}
	int getY()
	{
		return m_Y;
	}
private:
	int m_X;
	int m_Y;
};*/
/*
//5.圆类；
class Circle
{
public:
	//6.设置和获取半径；
	void setR(int r)
	{
		m_R = r;
	}
	int getR()
	{
		return m_R;
	}

	//7.设置和获取圆心；
	void setCenter(Point p)
	{
		m_Center = p;
	}
	Point getCenter()
	{
		return m_Center;
	}
	//11.利用成员函数判断点和圆的关系；
	void isInCircleByClass(Point& p)
	{
		//9.获取圆心和点的距离的平方；
		int distance = (m_Center.getX() - p.getX()) * (m_Center.getX() - p.getX()) + (m_Center.getY() - p.getY()) * (m_Center.getY() - p.getY());
		int rDistance = m_R * m_R;
		if (rDistance == distance)
		{
			cout << "成员函数：：点在圆上！" << endl;
		}
		else if (rDistance > distance)
		{
			cout << "成员函数：：点在圆内！" << endl;
		}
		else
		{
			cout << "成员函数：：点在圆外！" << endl;
		}
	}

private:
	//2.半径；
	int m_R;
	//3.圆心；
	Point m_Center;
};*/
//8.利用全局函数，判断点和圆的关系；
void isInCircle(Circle& c, Point& p)
{
	//9.获取圆心和点的距离的平方；
	int distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
	int rDistance = c.getR() * c.getR();
	if (rDistance == distance)
	{
		cout << "点在圆上！" << endl;
	}
	else if (rDistance > distance)
	{
		cout << "点在圆内！" << endl;
	}
	else
	{
		cout << "点在圆外！" << endl;
	}
}

void testCirclePoint()
{
	Point p1;
	p1.setX(10);
	//p1.setY(10);
	//p1.setY(11);
	p1.setY(9);

	Circle c1;
	Point center;
	center.setX(10);
	center.setY(0);
	c1.setCenter(center);
	c1.setR(10);

	//10.利用全局判断点和圆的关系；
	isInCircle(c1, p1);//点在圆上！ --> 点在圆外！ --> 点在圆内！

	//12.利用成员函数判断点和圆的关系；
	c1.isInCircleByClass(p1);//成员函数：：点在圆上！ --> 成员函数：：点在圆外！ --> 成员函数：：点在圆内！
}

//main256：案例：面向对象设计点和圆类求位置关系
int main256()
{
	testCirclePoint();

	system("pause");
	return EXIT_SUCCESS;
}